home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / STORBASE.D < prev    next >
Encoding:
Modula Definition  |  1990-08-29  |  7.0 KB  |  177 lines

  1. DEFINITION MODULE StorBase;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS, LONGWORD;
  4.  
  5. (*
  6.  * Dieses Modul bietet die Storage-Funktionen, die direkt die GEMDOS-Routinen
  7.  * und deren Verwaltung benutzen. Das Modul 'Storage' setzt hierauf auf.
  8.  *
  9.  * Bei Erfolg einer Alloc-Funktion liefert 'addr' immer einen Zeiger auf
  10.  * eine gerade Adresse, bei Mißerfolg ist 'addr'=NIL.
  11.  *
  12.  * Es ist auch möglich, ungerade Mengen Bytes anzufordern oder freizugeben.
  13.  *
  14.  * Um bei DEALLOCATE den gesamten Block freizugeben, sollte der Wert
  15.  * Null als 'size'-Argument übergeben werden.
  16.  *
  17.  * Diese Speicherverwaltung greift in die des GEMDOS direkt ein, falls
  18.  * dies nicht durch Setzen von 'MOSConfig.ExtendedMemoryAccess' auf FALSE
  19.  * verhindert wird. Dazu sucht sich dieses Modul die betreffenden internen
  20.  * GEMDOS-Strukturen im System-RAM. Können diese nicht gefunden werden,
  21.  * weil sich beispielsweise das interne Format geändert hat oder ist
  22.  * 'ExtendedMemoryAccess' FALSE, dann funktionieren einige der Funktionen
  23.  * dieses Moduls nur eingeschränkt:
  24.  *
  25.  *   'ALLOCATE', 'MemAvail' und 'Available' funktionieren weiterhin wie
  26.  *   gewohnt. Resize kann nur Bereiche verkleinern, liefert sonst FALSE
  27.  *   in 'ok'. 'AllAvail' liefert das Ergebnis von MemAvail, 'TrailAvail'
  28.  *   liefert immer Null. 'SysAlloc' funktioniert wie ALLOCATE - das bedeutet,
  29.  *   daß residente Programme damit nicht funktionieren; ansonsten sind
  30.  *   in der Regel keine Einschränkungen dadurch zu erwarten.
  31.  *   'DEALLOCATE' gibt immer den gesamten belegten Bereich frei, unabhängig
  32.  *   von der angegebenen Größe. Die übrigen Funktionen lösen bei Aufruf
  33.  *   Laufzeitfehler aus: 'MemSize', 'Keep', 'KeepAll' und 'Enlarge'.
  34.  *   Der Laufzeitfehler hat die Nummer -14 (MOSGlobals.IllegalCall).
  35.  *
  36.  * Ob die GEMDOS-Strukturen für dieses Modul erreichbar sind, kann über
  37.  * die Funktion 'FullStorBaseAccess' ermittelt werden.
  38.  *
  39.  * Wollen Sie Software erstellen, die unbedingt auf jedem Rechner mit jeder
  40.  * TOS-Version auch in Zukunft laufen soll, verzichten Sie auf alle
  41.  * Sys-Funktionen, wie 'SysAlloc', und verwenden Sie nicht 'InstallModule'
  42.  * aus 'ModCtrl' sondern die GEMDOS-Funktion 'Ptermres', wenn Sie residente
  43.  * Programme erstellen wollen. Modifizieren Sie außerdem das Implementations-
  44.  * Modul von 'MOSConfig' so, daß ExtendedMemoryAccess auf FALSE gesetzt wird,
  45.  * um die Software von vornherein nicht in Versuchung kommen zu lassen, denn
  46.  * damit simulieren sie praktisch ein zukünftiges TOS, bei dem kein Zugriff
  47.  * mehr auf die GEMDOS-Strukturen besteht.
  48.  *)
  49.  
  50. (*
  51.  * ---------------------------------------------------------------------------
  52.  * Folgende Funktionen dürfen jederzeit aufgerufen werden,
  53.  * unabhängig von 'FullStorBaseAccess':
  54.  * ---------------------------------------------------------------------------
  55.  *)
  56.  
  57. PROCEDURE ALLOCATE ( VAR addr: ADDRESS; size: LONGCARD );
  58.   (*
  59.    * Wie GEMDOS-Funktion Malloc().
  60.    * Liefert die Anfangsadresse in 'addr'. Liefert NIL, wenn kein
  61.    * Speicher frei.
  62.    *)
  63.  
  64. PROCEDURE DEALLOCATE ( VAR addr: ADDRESS; size: LONGCARD );
  65.   (*
  66.    * Wie GEMDOS-Funktion Mfree().
  67.    * Verkleinert Speicherblock um 'size'.
  68.    * Ist 'size'=0, wird der gesamte Speicherblock freigegeben.
  69.    * 'addr' wird NIL, wenn gesamter Platz freigegeben oder nicht
  70.    * belegt, sonst unverändert.
  71.    *)
  72.  
  73. PROCEDURE Resize ( VAR addr: ADDRESS; newSize: LONGCARD; VAR ok: BOOLEAN );
  74.   (*
  75.    * Wie GEMDOS-Funktion Mshrink().
  76.    * Bestimmt neue Größe eines bereits allozierten Bereichs.
  77.    * 'addr' bleibt unverändert, es sei denn, 'newSize' ist Null.
  78.    * Kleinere Größen sind jederzeit möglich; Vergrößerungen nur, wenn
  79.    * die GEMDOS-Strukturen erreichbar sind (s.o.). Kann die neue Größe
  80.    * nicht gesetzt werden, liefert 'ok' FALSE, sonst TRUE.
  81.    *)
  82.  
  83. PROCEDURE Available ( size: LONGCARD ): BOOLEAN;
  84.   (* Liefert TRUE, wenn die gefragte Menge Bytes noch frei ist. *)
  85.  
  86. PROCEDURE MemAvail (): LONGCARD;
  87.   (*
  88.    * Wie GEMDOS-Funktion Malloc(-1L).
  89.    * Liefert Anzahl in Bytes des im Augenblick größten belegbaren
  90.    * Speicherbereichs.
  91.    *)
  92.  
  93. PROCEDURE Inconsistent (): BOOLEAN;
  94.   (*
  95.    * Liefert TRUE, wenn die Speicherverwaltung inkonsistent (fehlerhaft)
  96.    * geworden ist. In diesem Fall kann es bei weiteren StorBase-Zugriffen
  97.    * zu fatalen Fehler kommen. Deshalb ist dann so bald wie möglich
  98.    * das System neu zu starten.
  99.    *)
  100.  
  101. PROCEDURE FullStorBaseAccess (): BOOLEAN;
  102.   (*
  103.    * Liefert TRUE, wenn auch alle StorBase-Funktionen uneingeschränkt
  104.    * verwendet werden können.
  105.    *)
  106.  
  107. (*
  108.  * ---------------------------------------------------------------------------
  109.  * Folgende Funktionen dürfen zwar aufgerufen werden, wenn
  110.  * 'FullStorBaseAccess' FALSE ist, jedoch werden ihre Funktionen
  111.  * intern durch die Obigen ersetzt:
  112.  * ---------------------------------------------------------------------------
  113.  *)
  114.  
  115. PROCEDURE AllAvail (): LONGCARD;
  116.   (*
  117.    * Liefert gesamten im Augenblick freien Speicherplatz, liefert
  118.    * notfalls (s.o.) nur die Länge des größten freien Bereichs.
  119.    *)
  120.  
  121. PROCEDURE SysAlloc ( VAR addr: ADDRESS; size: LONGCARD );
  122.   (*
  123.    * Wie ALLOCATE, jedoch wird der angeforderte Speicherbereich nicht bei
  124.    * Beendigung des Programms, das aktiv war, während der Speicher ange-
  125.    * fordert wurde, freigegeben, sondern erst, wenn 'Storage' beendet
  126.    * wird, also wenn z.B. die Shell verlassen wird.
  127.    * Verwendet notfalls (s.o.) ALLOCATE, sodaß Speicher doch be Prozeßende
  128.    * freigegeben wird.
  129.    *)
  130.  
  131. PROCEDURE TrailAvail (ad: ADDRESS): LONGCARD;
  132.   (*
  133.    * Liefert den noch evtl. freien Bereich direkt hinter dem angegebenen
  134.    * Block. Ist dieser größer als Null, kann der Block davor mittels
  135.    * 'Enlarge' (s.u.) um diesen Betrag vergrößert werden.
  136.    * Liefert notfalls (s.o.) Null.
  137.    *)
  138.  
  139. PROCEDURE Enlarge ( VAR addr: ADDRESS; add: LONGCARD; VAR ok: BOOLEAN );
  140.   (*
  141.    * Vergrößert den Block um 'add' Bytes, falls direkt dahinter entsprechend
  142.    * viel Speicher frei ist.
  143.    * 'ok' liefert entsprechend 'TRUE', wenn dies möglich war.
  144.    * Notfalls (s.o.) wird diese Funktion ignoriert und 'ok' liefert FALSE.
  145.    *)
  146.  
  147. (*
  148.  * ---------------------------------------------------------------------------
  149.  * Folgende Funktionen dürfen nicht aufgerufen werden, wenn
  150.  * 'FullStorBaseAccess' FALSE ist, ansonsten tritt ein Laufzeitfehler
  151.  * (IllegalCall) auf.
  152.  * ---------------------------------------------------------------------------
  153.  *)
  154.  
  155. PROCEDURE MemSize ( addr: ADDRESS ): LONGCARD;
  156.   (* Liefert Länge des Speicherblocks. Liefert 0L, wenn Block unbelegt ist. *)
  157.  
  158. PROCEDURE Keep ( addr: ADDRESS );
  159.   (*
  160.    * Macht den angegebenen Speicherbereich dauerhaft resident, als wenn
  161.    * er mit SysAlloc alloziert worden wäre.
  162.    * Er wird dann nur noch durch einen expliziten Aufruf von
  163.    * 'DEALLOCATE (addr, 0L)' freigegeben.
  164.    *)
  165.  
  166. PROCEDURE KeepAll ( process: LONGWORD );
  167.   (* Systemfunktion ! *)
  168.  
  169. (*
  170.  * ---------------------------------------------------------------------------
  171.  *)
  172.  
  173. PROCEDURE More ( id: INTEGER; p: ADDRESS );
  174.   (* Systemfunktion ! *)
  175.  
  176. END StorBase.
  177.